#定义一个函数 def 函数名():
def test():
    print("test")
#调用函数
test()

# py中参数没有修饰符。def 函数名(形参1，形参2):
def func_with_param(data):
    print(data)
func_with_param(12)

def func_with_params(p1,p2,p3):
    print(p1,p2,p3)
func_with_params(p1 = 12,p3 = 13,p2 = 14)

def func_with_params_default(p1,p2 = 23,p3 = 89):
    print(p1,p2,p3)
func_with_params_default(12)

print("================")
#形参可变参数：*。实参统一会被打包为元组
def func_with_params_tuple(*p):
    print(p)
    if len(p) == 1:
        print(p[0])
    if len(p) == 2:
        print(p[0])
        print(p[1])
#可以通过位置参数的形式传入n个参数
func_with_params_tuple(12)
func_with_params_tuple(12,"你好")

#双星号自动打包为字典格式
def func_with_params_dict(**p):
    print(p.get("name"))
    print(p.get("age"))
#实参必须用关键词的形式传参
func_with_params_dict(name = "张三",age = 12)

#定义顺序：单星号必须位于双星号之前。
#实参：位置参数在前，关键字传参在后。
def func_with_params_mix(*p1,**p2):
    print(p1[0])
    print(p2.get("username"))
func_with_params_mix(12,username = "卢俊义")


# =========================== 返回值 ========================
#返回值可以是任意类型；没有返回值默认返回None
def func_with_return():
    return 1212121
rtn = func_with_return()
print(rtn)

def func_with_none():
    print("none")
#返回结果：None
print(func_with_none())

def func_with_r():
    print("====== none =======")
    return
#返回结果：None
print(func_with_r())